package com.ccc.boot.easypoi.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ResourceUtils;
import sun.misc.BASE64Decoder;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;

/**
 * 文件操作工具类
 *
 * @author superC
 * @version 0.1.0
 * @date 2022/4/22
 */

public class MyFileUtils {

    protected static final Logger logger = LoggerFactory.getLogger(MyFileUtils.class);

    /*  ********************************     下载     ************************************ */

    /**
     * 创建文件
     *
     * @param dirName   文件夹名
     * @return {@link File}
     * @date 2022/4/22 16:41
     * @author superC
     */
    public static File createFile(String dirName) throws FileNotFoundException {
        String os = System.getProperty("os.name");
        // 文件存放地址
        File file;
        // windows系统
        if (os.toLowerCase().startsWith("win")) {
            //获取项目相对路径
            String path = System.getProperty("user.dir");
            file = new File(path + "/src/main/resources/static" + dirName);
        } else {
            // linux系统
            // 获取根目录 classpath：目录为jar包同级目录
            File rootPath = new File(ResourceUtils.getURL("classpath:").getPath());
            if (!rootPath.exists()) {
                rootPath = new File("");
            }
            file = new File(rootPath.getAbsolutePath() + dirName);
        }
        // 判断文件夹是否存在
        if (!file.exists()) {
            // 不存在，创建
            file.mkdirs();
        }
        return file;
    }

    /**
     * 下载文件到指定路径
     *
     * @param base64Str 文件base64字符串
     * @param filePath  文件路径
     * @return {@link boolean}
     * @date 2022/4/19 10:10
     * @author superC
     */
    public static boolean downloadFile(String base64Str, String filePath) {
        if (base64Str == null) {
            return false;
        }
        //对字节数组字符串进行Base64解码并生成文件
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            //Base64解码
            byte[] b = decoder.decodeBuffer(base64Str);
            for (int i = 0; i < b.length; ++i) {
                //调整异常数据
                if (b[i] < 0) {
                    b[i] += 256;
                }
            }
            //生成文件
            OutputStream out = new FileOutputStream(filePath);
            out.write(b);
            out.flush();
            out.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }

}